/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.servico;

import br.com.foxinline.modelo.Coordenada;
import br.com.foxinline.modelo.Unidade;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author ely
 */
@Stateless
public class UnidadeServico extends ServicoGenerico<Unidade> {

    public UnidadeServico() {
        super(Unidade.class);
    }

    public List<Unidade> findUnidade(Unidade unidade) {
        String sql = "select u from Unidade u ";


        sql += " WHERE ";

        if (unidade.getNome() != null && !unidade.getNome().equals("")) {
            sql += " lower(u.nome) like lower(:nome) and ";
        }

        if (unidade.getCodigoCNES() != null && !unidade.getCodigoCNES().equals("")) {
            sql += " u.codigoCNES = :codigo and ";
        }

        if (unidade.getTipoUnidade() != null) {
            sql += " u.tipoUnidade  = :tipoUnidade and ";
        }
        sql += " 1=1 AND u.ativo = TRUE Order by u.nome ASC";

        Query query = getEntityManager().createQuery(sql);

        if (unidade.getNome() != null && !unidade.getNome().equals("")) {
            query.setParameter("nome", "%" + unidade.getNome() + "%");
        }

        if (unidade.getCodigoCNES() != null && !unidade.getCodigoCNES().equals("")) {
            query.setParameter("codigoCNES", unidade.getCodigoCNES());
        }

        if (unidade.getTipoUnidade() != null) {
            query.setParameter("tipoUnidade", unidade.getTipoUnidade());
        }

        return query.getResultList();
    }

    public List<Coordenada> lstCoordenada(Unidade unidade) {
        String sql = "select c from Unidade u JOIN u.area a JOIN a.coordenadas c WHERE u.id = :id order by u.id, c.id ";
        Query query = getEntityManager().createQuery(sql);
        query.setParameter("id", unidade.getId());

        return query.getResultList();
    }

    public List<Unidade> autocomplete(String nome) {
        if (nome == null || nome.isEmpty()) {
            return pesquisarTodos();
        }
        String sql = "Select u from " + Unidade.class.getSimpleName() + " u where lower(u.nome) like lower(:nome)";

        Query query = getEntityManager().createQuery(sql).setParameter("nome", "%" + nome + "%");

        return query.getResultList();
    }
      
}
